package controladores;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import dominio.Cliente;
import dominio.PaqueteDeViaje;
import dominio.Reserva;

public class ReservaServlet extends GenericServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
		private Reserva reserva;

	public ReservaServlet() {
		super();
		
	}

	public void doAction(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		HttpSession session = request.getSession(true);
		reserva = new Reserva();
		try {
			session.removeAttribute("reserva");
			Integer idPaquete = Integer.parseInt(request.getParameter("paquete"));
			String[] idsCliente = request.getParameterValues("cliente");
			String idReserva = request.getParameter("reserva");
			String datosReserva = "";
			
			if(idReserva != null){
				reserva.setIdReserva(Integer.parseInt(idReserva));
				datosReserva = "?reserva=" + idReserva;
			}
			
			List<Cliente> clientes = new Cliente().leerRegistrosBD();
			PaqueteDeViaje pdv = new PaqueteDeViaje().leerRegistroBD(idPaquete);
			reserva.setPdv(pdv);

			cargarPasajeros(clientes, idsCliente, request);
			
			if(idsCliente != null) {
				reserva.setPasajeros(idsCliente.length);
				calcularPrecio(request, idsCliente.length, pdv.getPrecio());
				for (String idc : idsCliente) {
					if(datosReserva == ""){
						datosReserva += "?cliente=" + idc;
					} else {
						datosReserva += "&cliente=" + idc;
					}
				}
			} else {
				calcularPrecio(request, 0, pdv.getPrecio());
			}
			
			request.setAttribute("datosReserva", datosReserva);
			request.setAttribute("clientes", clientes);
			request.setAttribute("pdv", pdv);
			session.setAttribute("reserva", reserva);
			
			request.getRequestDispatcher("/reserva.jsp").forward(request,
					response);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void calcularPrecio(HttpServletRequest request, Integer length,
			Float precio) {
		Integer cantidadPersonas = 0;
		Float precioPersonas = 0F;
		Float impuestos = 0F;
		Float precioTotal = 0F;
		
		if(length != null){
			cantidadPersonas = length;
			precioPersonas = cantidadPersonas * precio;
			impuestos = precioPersonas * 21 / 100;
			precioTotal = precioPersonas + impuestos;
		}

		request.setAttribute("cantidadPersonas", cantidadPersonas );
		request.setAttribute("precioPersonas", precioPersonas );
		request.setAttribute("impuestos", impuestos );
		request.setAttribute("precioTotal", precioTotal );
		reserva.setPrecioTotal(precioTotal);
		
	}

	public void cargarPasajeros(final List<Cliente> clientes, String[] ids,
			HttpServletRequest request) {
		List<Cliente> pasajeros = new ArrayList<Cliente>();
		if (ids != null) {
			for (Iterator<Cliente> iter = clientes.listIterator(); iter.hasNext();) {
				Cliente c = iter.next();
				for (String id : ids) {
					if (c.getIdCliente() == Integer.parseInt(id)) {
						pasajeros.add(c);
						iter.remove();
					}
				}
			}
			reserva.setClientes(pasajeros);
		}
		request.setAttribute("pasajeros", pasajeros);
	}

}
